// NGUI items
private var buildPanelOpen : boolean = false; // Baumenue offen/geschlossen
var buildPanelTweener : TweenPosition; // Handler für das Tween-Skript
var buildPanelArrowTweener : TweenRotation; // Handler für das Tween-Skript


// Placement Plane items
var placementPlanesRoot : Transform; // Null-Parent (TopLevel-Transform) der Plattformen
var hoverMat : Material; // Mouseover-Material (Border_OK)
var placementLayerMask : LayerMask; // Nur in bestimmtem Layer raycasten! (placementPlane_open/taken)
private var originalMat : Material; // FUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
var lastHitObj : GameObject; // FUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU

// build selection items
var onColor : Color; // Buttonfarbe zum visualisieren der selektierten Einträge
var offColor : Color; // Buttonfarbe zum visualisieren der unselektierten Einträge

var allStructures : GameObject[]; //	Array fuer alle Bauoptionen (momentan: Flak und Artillery)
// Array fuer die Icons
var buildBtnGraphics : UISlicedSprite[]; // FUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
var structureIndex : int = 0; // FUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU

var levelMaster : LevelMaster;

function Start() {
	levelMaster = GameObject.FindWithTag("LevelMaster").GetComponent(LevelMaster); // LevelMaster-Connect
	structureIndex = 0; // Erstes Element des Array als Standard (Artillery)
	UpdateGUI();
}

// Hier Raycasting
function Update() {
	if (buildPanelOpen) {
		// Ray von Maus in Vorwärtsrichtung der Kamera
		var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
		var hit : RaycastHit;
		/*1000 ist die Distanz, danach den Layer*/
		if (Physics.Raycast(ray, hit, 1000, placementLayerMask)) // wurde was getroffen?
		{
			if (lastHitObj) // wurde vorher schon was getroffen?
			{
				lastHitObj.renderer.material = originalMat; // dann dort Ausganszustan
			}

			lastHitObj = hit.collider.gameObject; // neuer Treffer als letzter speichern
			originalMat = lastHitObj.renderer.sharedMaterial; // originalMat-Variable aktualisieren/zwischenspeichern
			lastHitObj.renderer.sharedMaterial = hoverMat; // aktuelles Mat gegen Highlight austauschen
		} else // falls nichts getroffen wurde
		{
			if (lastHitObj) // aber irgendwann vorher schon mal									((
			{
				lastHitObj.renderer.sharedMaterial = originalMat; // Mat vom letzten wieder original
				lastHitObj = null; // und Referenz auf letztes aufheben
			}
		}

		// Turmplatzierung bei Mausklick (0 ist die linke Maustaste)
		if (Input.GetMouseButtonDown(0) && lastHitObj && levelMaster.turretCosts[structureIndex] <= levelMaster.cashCount) // Klick und es existiert gerade ein Treffer
		{
			if (lastHitObj.tag == "placementPlane_open") // Plattform leer?
			{
				var newStructure : GameObject = Instantiate(allStructures[structureIndex], lastHitObj.transform.position, Quaternion.identity);
				// Nur falls zufaellige Rotation
				// newStructure.transform.localEulerAngles.y = (Random.Range(0,360)); //zufällige Rotation
				lastHitObj.tag = "placementPlane_taken";

				levelMaster.cashCount -= levelMaster.turretCosts[structureIndex];
				levelMaster.UpdateGUI();
			}
		}
	}
}

// GUI-Update
function UpdateGUI() {
	for (var theBtnGraphic : UISlicedSprite in buildBtnGraphics) {
		theBtnGraphic.color = offColor;
	}

	buildBtnGraphics[structureIndex].color = onColor;
}

// Button übergeben um Auswahl zu setzen
function SetBuildChoice(btnObj : GameObject) {
	var btnName : String = btnObj.name; // Name des Button
	if (btnName == "btn_artillery") // Artillery
	{
		structureIndex = 0; // Index 0
	} else if (btnName == "btn_flak") // Flak
	{
		structureIndex = 1; // Index 1
	} else if (btnName == "btn_minigun") // Flak
	{
		structureIndex = 2; // Index 1
	}
	UpdateGUI();
}

// WICHTIG: REDUNDANZ DURCH VERWENDUNG DER BOOLSCHEN VARIABLE STATT TRUE/FALSE ENTFERNEN!!!
function ToggleBuildPanel() {

	// Falls in offenem Zustand geklickt, muss die TEXTUR GEWECHSELT und das Panel eingefahren werden
	if (buildPanelOpen) {
		for (var thePlane : Transform in placementPlanesRoot) {
			// WICHTIG: Ich will hier eigentlich die Textur tauschen!
			thePlane.gameObject.renderer.enabled = false;
		}

		// Panel ausblenden durch Aufrufen der Funktion im zugewiesenen Skript am Objekt (s.oben)
		buildPanelTweener.Play(false);
		// Pfeil umdrehen
		buildPanelArrowTweener.Play(false);
		// Boolean aktualisieren
		buildPanelOpen = false;
	} else // Buildpanel ist geschlossen
	{
		// alles anzeigen
		for (var thePlane : Transform in placementPlanesRoot) {
			thePlane.gameObject.renderer.enabled = true;
		}

		// Panel ausblenden
		buildPanelTweener.Play(true);
		// Pfeil umdrehen
		buildPanelArrowTweener.Play(true);
		// Boolean aktualisieren
		buildPanelOpen = true;
	}
}
